﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Lidgren.Network;

namespace Tetris_AntiGravity
{
    class JugadorNetwork
    {
        public long id = 0;
        public byte lineas = 0;
        public byte tornados = 0;
        public byte bombas = 0;
        public byte figuraActual = 0;
        public byte figuraProxima = 0;
        public byte posX = 0;
        public byte posY = 0;
        public byte rotacion = 0;
        public byte perdio = 0;
        public byte[] tablero = new byte[170];

        public JugadorNetwork(Jugador jug)
        {
            setDatos(jug);
        }

        public JugadorNetwork()
        {
        }

        private void setDatos(Jugador jugador)
        {
            this.lineas = (byte)jugador.sumaLineas;
            this.tornados = (byte)jugador.tornado;
            this.bombas = (byte)jugador.bombas;
            this.figuraActual = (byte)jugador.figuraActual.tipo;
            this.figuraProxima = (byte)jugador.figuraSiguiente.tipo;
            this.posX = (byte)jugador.figuraActual.posicion.X;
            this.posY = (byte)jugador.figuraActual.posicion.Y;
            this.rotacion = (byte)jugador.figuraActual.rotacion;
            if (jugador.perdio)
                this.perdio = 1;
            else
                this.perdio = 0;
            
            
            int k = 0;
            int[,] tableroJugador = jugador._tablero.tablero;

            for (int i = 0; i < jugador._tablero.ANCHO; i++)
            {
                for (int j = 0; j < jugador._tablero.ANCHO; j++)
                {
                    tablero[k] = (byte)tableroJugador[j, i];
                    k++;
                }
            }
        }

        public int[,] getTableroJugador() {
            int[,] matriz = new int[10, 17];
            
            int cont=0;
            for (int i = 0; i < 17; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    matriz[j, i] = tablero[cont];
                    cont++;
                }
            }
            
            return matriz;
        }

        public void escribirPaquete(NetOutgoingMessage msg)
        {
            msg.Write(id);
            msg.Write(lineas);
            msg.Write(tornados);
            msg.Write(bombas);
            msg.Write(figuraActual);
            msg.Write(figuraProxima);
            msg.Write(posX);
            msg.Write(posY);
            msg.Write(rotacion);
            msg.Write(perdio);

            msg.Write(tablero);
        }

        public void leerPaquete(NetIncomingMessage msg)
        {
            this.id = msg.ReadInt64();
            this.lineas = msg.ReadByte();
            this.tornados = msg.ReadByte();
            this.bombas = msg.ReadByte();
            this.figuraActual = msg.ReadByte();
            this.figuraProxima = msg.ReadByte();
            this.posX = msg.ReadByte();
            this.posY = msg.ReadByte();
            this.rotacion = msg.ReadByte();
            this.perdio = msg.ReadByte();
            this.tablero = msg.ReadBytes(msg.LengthBytes - msg.PositionInBytes);
        }
    }

    
}
